package com.knowledge.share.utils;

import java.lang.reflect.Field;
import java.util.Arrays;
import java.util.HashMap;

public class ReflectTools {
    /**
     * @desc 通过反射的方式来实现过滤实体类中的某些字段，返回一个hash对象
     * @param Entity 要处理的实体类
     * @param filterField 要过滤的字段信息
     * @return
     * @param <T>
     */
    public static <T> HashMap<String,Object> filterEntityField(T Entity, String[] filterField) throws IllegalAccessException {
        //实例化一个hash类
        HashMap<String, Object> user = new HashMap<>();

        //获取当前实体类中类对象信息
        Class<?> entityClass = Entity.getClass();

        //获取当前实体类中所有的属性字段
        Field[] fields = entityClass.getDeclaredFields();

        //增强型的for循环字段信息
        for(Field field:fields){
            //设置属性可以访问,私有字段可以访问
            field.setAccessible(true);
            //获取当前的字段属性内容
            String fieldName = field.getName();
            //获取属性值
            Object fieldValue = field.get(Entity);

            //判断当前的字段是否是过滤的字段,如果是直接过滤掉进入下一个循环
            if(Arrays.asList(filterField).contains(fieldName)){
                continue;
            }
            user.put(fieldName,fieldValue);
        }
        return user;
    }
}
